#ifndef __M__CONSUMER_H_
#define __M__CONSUMER_H_

#include "../mqCommon/Helper.hpp"
#include "../mqCommon/Logger.hpp"
#include "../mqCommon/proto/mq_message.pb.h"
#include <iostream>
#include <unordered_map>
#include <memory>
#include <mutex>
#include <vector>
#include <functional>

using namespace mq_message;
using namespace mq;
using namespace std;

namespace mq
{
    using ConsumerCallback = function<void(const string &, const BasicProperties *, const string &)>; // 消息处理回调函数

    // 订阅者类：描述了当前信道订阅哪个队列
    struct Consumer
    {
        using ptr = shared_ptr<Consumer>;
        string _tag;                // 订阅者标识
        string _qname;              // 订阅队列名
        bool _auto_ack;             // 自动应答标志
        ConsumerCallback _callback; // 消息处理回调函数：收到服务端推送消息，由消息异步处理线程回调处理
        Consumer(const string &tag, const string &qname, bool auto_ack, const ConsumerCallback &callback)
            : _tag(tag), _qname(qname), _auto_ack(auto_ack), _callback(callback) {}
        Consumer() {}
    };
}

#endif